import { defineConfig } from 'vite'
import { fileURLToPath, URL } from 'node:url'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import VueMacros from 'unplugin-vue-macros'
import { resolve } from 'path'
import dts from 'vite-plugin-dts'

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        VueMacros.vite({
            plugins: {
                vue: vue(),
                vueJsx: vueJsx(),
            },
        }),
        dts({ tsconfigPath: './tsconfig.build.json' })
    ],
    resolve: {
        alias: {
            '@': fileURLToPath(new URL('./src', import.meta.url))
        }
    },
    test: {
        globals: true,
        environment: 'jsdom'
    },
    build: {
        // 在bulid 中添加库模式：
        lib: {
            // 入口文件
            entry: resolve(__dirname, 'src/index.ts'),
            // name 则是暴露的全局变量，并且在 formats 包含 'umd' 或 'iife' 时是必需的。
            name: 'VElement',
            // 是输出的包文件名，默认 fileName 是 package.json 的 name 选项
            fileName: 'v-element',
        },
        rollupOptions: {
            external: ['vue', '@fortawesome/fontawesome-svg-core', '@fortawesome/free-solid-svg-icons', '@fortawesome/vue-fontawesome'],
            output: {
                exports: 'named', // 既有具名导出，也有默认导出
                globals: {
                    vue: 'Vue'
                },
                assetFileNames: (chunkInfo) => {
                    if (chunkInfo.name === 'style.css') {
                        return 'index.css'
                    }
                    return chunkInfo.name as string
                }
            }
        }
    },
})
